/**
 * 用户信息接口返回类型（根据实际登录返回数据定义）
 */
export interface UserInfoDetail {
  /** 租户ID */
  tenantId: string
  /** 租户名称 */
  tenantName: string
  /** 部门ID */
  departId: string
  /** 机构ID */
  institutionId: string
  /** 用户ID */
  id: string
  /** 用户名 */
  userName: string
  /** 真实姓名 */
  realName: string
  /** 员工ID */
  employeeId: string
  /** 公司代码 */
  sysCompanyCode: string
  /** 组织代码 */
  sysOrgCode: string
  /** 系统类型 */
  systemType: string | null
  /** 头像 */
  avatar: string | null
  /** 简称 */
  abbreviation: string
  /** 是否管理员 */
  admin: boolean
}

/**
 * 令牌信息接口返回类型（根据实际登录返回数据定义）
 */
export interface TokenInfoDetail {
  /** 令牌名称 */
  tokenName: string
  /** 令牌值 */
  tokenValue: string
  /** 是否登录 */
  isLogin: boolean
  /** 登录ID */
  loginId: string
  /** 登录类型 */
  loginType: string
  /** 令牌超时时间（秒） */
  tokenTimeout: number
  /** 会话超时时间（秒） */
  sessionTimeout: number
  /** 令牌会话超时时间（秒） */
  tokenSessionTimeout: number
  /** 令牌活动超时时间（秒） */
  tokenActivityTimeout: number
  /** 登录设备 */
  loginDevice: string
  /** 标签 */
  tag: string | null
}

/**
 * 登录接口返回类型（根据实际登录返回数据定义）
 */
export interface LoginSuccessResponse {
  /** 用户信息 */
  userInfo: UserInfoDetail
  /** 令牌信息 */
  tokenInfo: TokenInfoDetail
}

/**
 * 员工信息接口返回类型
 */
export interface EmployeeInfo {
  createBy: string
  createName: string
  createTime: string
  updateBy: string
  updateName: string
  updateTime: string
  sysCompanyCode: string | null
  sysOrgCode: string
  delFlag: number
  id: string
  tenantId: string
  tenantName: string | null
  abbreviation: string | null
  positionStatus: string
  sex: number
  userId: string
  cardNumber: string | null
  birthday: string | null
  nativePlace: string
  nation: string | null
  idCardType: string
  idCardNum: string
  entryDate: string | null
  email: string
  maritalStatus: string
  accountProperties: string | null
  education: string
  province: string | null
  city: string | null
  district: string | null
  domicile: string | null
  graduateSchool: string | null
  professional: string
  grade: string | null
  businessUnits: string | null
  contractType: string | null
  contractNum: string | null
  contractStartTime: string | null
  contractEndTime: string | null
  award: string | null
  qualification: string | null
  address: string
  remark: string
  workNo: string
  isAdmin: string
  isDefaultLogin: string | null
  picture: string | null
  realname: string
  phone: string
  employeeNum: string
  avatar: string | null
  departIds: string | null
  orgCodes: string | null
  departNames: string | null
  roleIds: string | null
  roleNames: string | null
  sysPositionCode: string
  sysInstitutionCode: string | null
  politicalOutlookCode: string
  jobTitleCode: string
  jobTitleName: string | null
  mnemonicCode: string
  titleCode: string
  titleName: string | null
  enterpriseEmail: string
  landlinePhone: string | null
  departmentHeadId: string | null
  departmentHeadName: string | null
  directSuperiorId: string | null
  directSuperiorName: string | null
  type: string
  bank: string
  accountNo: string
  departIdList: string | null
  departNameAbbr: string | null
  status: number
  statusDesc: string
}

/**
 * 租户信息接口返回类型
 */
export interface TenantInfo {
  createBy: string
  createName: string
  createTime: string
  updateBy: string
  updateName: string
  updateTime: string
  sysCompanyCode: string | null
  sysOrgCode: string
  delFlag: number
  id: string
  name: string
  status: number
  abbreviation: string
  logo: string | null
  contact: string
  contactTel: string
  contactEmail: string | null
  address: string
  endDate: string | null
  beginDate: string
  province: string | null
  city: string | null
  district: string | null
  area: string | null
  initDataStatus: number
  seal: string | null
  no: string
  domainName: string | null
  industryCode: string | null
  industryName: string | null
  websiteName: string | null
  description: string | null
  priority: number
  legal: string | null
  taxCode: string | null
  bank: string | null
  accountNo: string | null
  parentId: string | null
  sonTenantList: string | null
  operateType: number
  code: string
  userList: string | null
  username: string
  password: string | null
  phone: string
}

/**
 * 部门信息接口返回类型
 */
export interface DepartmentInfo {
  id: string
  parentId: string
  departName: string
  departNameEn: string | null
  departNameAbbr: string
  departOrder: number
  description: string | null
  orgCategory: string
  orgType: string
  orgCode: string
  mobile: string
  fax: string | null
  legalPerson: string | null
  taxId: string
  accountNum: string
  depositBank: string
  directorUserIds: string
  directorUserRealnames: string
  address: string
  memo: string
  status: number
  qywxIdentifier: string | null
  tenantId: string
  treePath: string | null
  oldDirectorUserIds: string | null
  createBy: string
  createTime: string
  updateBy: string
  updateTime: string
  sysOrgCode: string
  delFlag: number
  children: []
  key: string | null
  value: string | null
}

/**
 * 用户信息接口返回类型（根据userinfo.json定义）
 */
export interface UserInfoData {
  /** 用户ID */
  id: string
  /** 用户名 */
  username: string
  /** 真实姓名 */
  realname: string
  /** 头像 */
  avatar: string | null
  /** 生日 */
  birthday: string | null
  /** 性别 */
  sex: string | null
  /** 邮箱 */
  email: string | null
  /** 手机号 */
  phone: string
  /** 状态 */
  status: number
  /** 身份证号 */
  idCard: string | null
  /** 员工信息 */
  employee: EmployeeInfo
  /** 租户信息 */
  sysTenant: TenantInfo
  /** 部门信息 */
  sysDepart: DepartmentInfo
  /** 部门ID列表 */
  deptIds: string | null
  /** 机构ID */
  institutionId: string
  /** 公司代码 */
  sysCompanyCode: string
}

/**
 * 用户信息接口完整返回类型
 */
export interface UserInfoResponse {
  /** 用户信息 */
  userInfo: UserInfoData
}

/**
 * 验证码登录响应类型别名
 */
export type CaptchaLoginResponse = LoginSuccessResponse

/**
 * 密码登录响应类型别名
 */
export type PasswordLoginResponse = LoginSuccessResponse

/**
 * 判断登录响应是否成功
 * @param response 登录响应对象
 * @returns 是否成功
 */
export function isLoginSuccess(response: LoginSuccessResponse): boolean {
  return response.userInfo.id !== undefined
}
